package cn.tanghom.support.page;

import java.io.Serializable;
import java.util.List;

/**
 * 分页类
 *
 * @param <T> 分页数据的类型
 * @author DongQihong
 */
public class Pager<T> implements Serializable {
    /**
     * 分页项
     */
    private List<T> items;
    /**
     * 当前页
     */
    private Long index = 1L;
    /**
     * 每页大小
     */
    private Integer size = 10;
    /**
     * 总记录数
     */
    private Long totalRecord = 0L;
    /**
     * 总页数
     */
    private Long totalPage = 0L;

    /**
     * 获取数据
     *
     * @return 数据
     */
    public List<T> getItems() {
        return items;
    }

    /**
     * 设置数据
     *
     * @param items 分页数据项
     */
    public void setItems(List<T> items) {
        this.items = items;
    }

    /**
     * 获取当前页码
     *
     * @return 当前页码
     */
    public Long getIndex() {
        return index;
    }

    /**
     * 设置当前页码
     *
     * @param index 当前页码
     */
    public void setIndex(Long index) {
        this.index = (null == index) ? 1 : index;
    }

    /**
     * 获取每页大小
     *
     * @return 每页多少条
     */
    public Integer getSize() {
        return size;
    }

    /**
     * 设置每页多少条
     *
     * @param size 每页多少条
     */
    public void setSize(Integer size) {
        if (null == size || size < 1L || this.index < 1L) {
            size = 1;
            this.index = 1L;
        }
        this.size = size;
    }

    /**
     * 获取总记录数
     *
     * @return 总记录数
     */
    public Long getTotalRecord() {
        return totalRecord;
    }

    /**
     * 设置总记录数
     *
     * @param count 总记录数
     */
    public void setTotalRecord(Long count) {
        this.totalRecord = (null == count) ? 0 : count;
        totalPage = (this.totalRecord + size - 1) / size;
    }

    /**
     * 获取总页数
     *
     * @return 总页数
     */
    public Long getTotalPage() {
        return totalPage;
    }

    /**
     * 设置总页数
     *
     * @param totalPage 总页数
     */
    public void setTotalPage(Long totalPage) {
        this.totalPage = totalPage;
    }

    /**
     * 计算当前页开始记录
     *
     * @return 开始记录
     */
    public Long startRow() {
        final Long firstResult = size * (index - 1);
        return firstResult;
    }
}
